Video processing applications such as video coding are often computationally intensive. The computationally intensive processing for video coding is often performed using parallel processing architectures using multiple processing engines. One example of parallel processing architectures uses a form of concurrent processing, where various, differing functions of the encoder are performed in parallel by different processing modules. The different processing modules are individual processing engines arranged as pipelined stages, where each stage concurrently operates on different coding units (“pixel blocks”) of the frame being coded.
One example of pipelining used in concurrent video processing is when functions such as motion estimation, quantization, and entropy coding operate upon different pixel blocks in a pipeline fashion. A common occurrence in pipelined video applications arises when an intra-prediction estimation operation or a motion estimation operation is performed in a pipeline stage that is different from the pipeline stage in which the mode decision operation is performed. When the intra-prediction estimation operation or the motion estimation operation is performed in a differing pipeline stage, the intra-prediction estimation or motion estimation operation proceeds to the next pixel block without the benefit of determining what decision is being made by the mode decision module for the current pixel block. Accordingly, when the mode of the current pixel block is not available to the intra-prediction estimation or motion estimation module for the next block, the performance (for example, in picture quality or processing required) is adversely affected.